package cxydmmszl.chapter09.t150;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;

/**
 * <li style="color: red;">Prob</li>
 * 判断一个点是否在三角形内部
 * <li style="color: green;">Desc</li>
 * 在二维坐标系中，所有的值都是 double 类型，那么一个三角形可以由 3 个点来代表，
 * 给定 3 个点代表的三角形，再给定一个点 (x, y)，判断 (x, y) 是否在三角形中。
 * <li style="color: green;">Input</li>
 * 输入有四行，每行两个浮点数。
 * 前三行的 6 个数分别代表三角形的三个顶点的坐标。
 * 最后两个数分别表示 (x, y)。
 * <li style="color: green;">Output</li>
 * 若 (x, y) 在三角形中，输出 "Yes"。
 * 否则输出 "No"。
 * <li style="color: blue;">Link</li> CD59
 *
 * @author habitplus
 * @since 2021-10-16 10:43
 */
public class Main {

    static final StreamTokenizer st =
            new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

    static double nextDouble() {
        try {
            st.nextToken();
            return st.nval;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) throws Exception {
        double x1 = nextDouble();
        double y1 = nextDouble();

        double x2 = nextDouble();
        double y2 = nextDouble();

        double x3 = nextDouble();
        double y3 = nextDouble();

        double x = nextDouble();
        double y = nextDouble();

        boolean ans = isInside(x1, y1, x2, y2, x3, y3, x, y);
        System.out.println(ans ? "Yes" : "No");
    }

    private static double crossProduct(double x1, double y1, double x2, double y2) {
        return x1 * y2 - x2 * y1;
    }

    public static boolean isInside(double x1, double y1,
                                   double x2, double y2,
                                   double x3, double y3,
                                   double x, double y) {
        // 如果三角形的点不是逆时针输入，改变一下顺序
        if (crossProduct(x3 - x1, y3 - y1, x2 - x1, y2 - y1) >= 0) {
//            double t = x2; x2 = x3; x3 = t;
//            t = y2; y2 = y3; y3 = t;
            return isInside(x1, y1, x3, y3, x2, y2, x, y);
        }

        if (crossProduct(x2 - x1, y2 - y1, x - x1, y - y1) < 0) {
            return false;
        }

        if (crossProduct(x3 - x2, y3 - y2, x - x2, y - y2) < 0) {
            return false;
        }

        if (crossProduct(x1 - x3, y1 - y3, x - x3, y - y3) < 0) {
            return false;
        }

        return true;
    }
}
